c语言 *p=*tp与*p==*tp的区别
时间: 2024-08-14 19:04:08 浏览: 51
在 C 语言中,`*p=*tp` 和 `*p == *tp` 表达的意思是不同的。
1. `*p=*tp`: 这是一个赋值操作,它首先解引用指针 `tp`,即 `*tp`,然后将这个表达式的值赋给指针 `p` 所指向的位置。这通常用于将一个变量的值复制到另一个变量,假设 `tp` 指向了某个变量的地址,`*p=*tp` 将该变量的值拷贝到了 `p` 指向的地方。
2. `*p == *tp`: 这是一个比较操作,它比较的是两个指针所指向的内容是否相等。`*p` 解引用 `p` 的内容,`*tp` 解引用 `tp` 的内容,所以 `*p == *tp` 判断的是这两个内存位置上的值是否相等。
相关问题
C语言 char* wifi_name[] = { "HUAWEI1078", "TP-LINK 983", "Moorgen Wifi"};算出元素个数
可以使用 sizeof(wifi_name) / sizeof(wifi_name[0]) 来计算元素个数,其中 wifi_name[0] 表示数组的第一个元素,sizeof(wifi_name[0]) 表示第一个元素的大小,sizeof(wifi_name) 表示整个数组的大小。因此,整个表达式的值就是数组中元素的个数。完整代码如下:
```
#include <stdio.h>
int main() {
char* wifi_name[] = { "HUAWEI1078", "TP-LINK 983", "Moorgen Wifi"};
int num = sizeof(wifi_name) / sizeof(wifi_name[0]);
printf("数组中元素的个数为:%d\n", num);
return 0;
}
```
用c语言写一个广义表 A=((a,b,c),(d,e,f))
您好!以下是用C语言编写广义表的代码:
```
#include<stdio.h>
#include<stdlib.h>
typedef struct GLNode{
int tag; // 标志域,tag=1为原子,tag=0为子表
union{
char atom; // 原子结点的值域
struct GLNode* hp; // 子结点指针
}val;
struct GLNode* tp; // 指向下一个子节点
}*GList;
void CreateGList(GList *L, char* str); // 创建广义表
void PrintGList(GList L); // 输出广义表
void CreateGList(GList *L, char* str){
if(!L) return;
char c = *str++; // 获取第一个字符
if(!c) *L = NULL; // 如果字符串为空,则广义表也为空
else{
*L = (GList)malloc(sizeof(struct GLNode)); // 分配内存
if(c == '('){ // 如果当前字符为'(',则说明是子表
(*L)->tag = 0; // 标记为子表
(*L)->val.hp = NULL; // 初始化子结点指针
CreateGList(&((*L)->val.hp), str); // 递归创建子表
c = *str++; // 获取下一个字符
}else{
(*L)->tag = 1; // 否则为原子
(*L)->val.atom = c; // 存储原子值
c = *str++; // 获取下一个字符
}
(*L)->tp = NULL; // 初始化下一个子节点指针
if(c == ','){ // 如果下一个字符为',',则说明还有兄弟子节点
CreateGList(&((*L)->tp), str); // 递归创建兄弟节点
}
else if(c == ')'){ // 如果下一个字符为')',则子节点创建完毕
return;
}
}
}
void PrintGList(GList L){
if(!L) return;
if(L->tag == 1){ // 如果当前节点为原子
printf("%c", L->val.atom);
}else{ // 否则为子表
printf("(");
PrintGList(L->val.hp); // 递归输出子表
printf(")");
}
if(L->tp) printf(","); // 如果有兄弟子节点,则输出','
PrintGList(L->tp); // 递归输出兄弟子节点
}
int main(){
char* str = "((a,b,c),(d,e,f))";
GList L;
CreateGList(&L, str);
PrintGList(L);
printf("\n");
return 0;
}
```
希望对您有帮助~