-
这个问题本身有问题。
结果没有初始化,没有指向任何空格就传递给add函数,这本身就是错误的,当然也可以实现,在add函数中申请一个地址来存储结果,并将地址发回给结果,但是该地址的**是无法控制的, 容易造成内存泄漏。
void add(int *a,int *b,int** r)int *p=(int *)malloc(sizeof(int));
p=*a+*b;
r=p;
-
是的,有问题,现在的考试真的很困难。
void main()
int a = 9,b = 6;
int c;*不定义这个,程序也可以运行,但存在导致系统异常或崩溃的隐患*
int *result = &c;*这更好,不会导致内存泄漏*
add(&a, &b, &result);
printf("%d + d = %d",a,b,*result);
void add(int *a,int *b,int** r)*r = *a+*b;
-
不管内存泄漏如何,呵呵:
c:void add(int *x, int *y, int **s)
s = (int*)malloc( sizeof(int) )s = *x + y;
c++:void add(int *x, int *y, int **s)
s = new int(*x + y);
不会导致内存泄漏的版本:
void add(int *x, int *y, int **s)static int n = 0;
n = *x + y;
s = &n;
-
选择 b*(p+5) 即 p[5],由于 p 指针指向数组 s 的第一个地址,因此 p[5] 实际上是 p[5],即字符串终止符'\0'
-
答案是b。
p+5) 返回一个数值,可以直接排除 C
-
总结。 1. 变量的指针表示变量得到 b。
a) 值 b) 地址 c) 名称 d) 标志 2,已定义 int k=2;int *ptr1,*ptr2;而 ptr1 和 ptr2 都指向了变量 k,下面无法正确执行的赋值语句是 b。
a)k=*ptr1+*ptr2 b)ptr2=k c)ptr1=ptr2 d)k=*ptr1*(*ptr2) 3.如果指定:int *p,m=5,n;以下段正好是 d。
c语言问题(指针)。
亲爱的,我正在研究这个问题的答案,请耐心等待。
好。 感觉有点难做。
请说。 1. 变量的指针表示变量得到 b。 a) 值 b) 地址 c) 名称 d) 标志 2,已定义 int k=2;int *ptr1,*ptr2;而 ptr1 和 ptr2 都指向了变量 k,下面无法正确执行的赋值语句是 b。
a)k=*ptr1+*ptr2 b)ptr2=k c)ptr1=ptr2 d)k=*ptr1*(*ptr2) 3.如果指定:int *p,m=5,n;以下段正好是 d。
-
为此问题选择 B。 *(a+i)) 不是对数组元素的正确引用。
-
d 是错误的。
在 a 中,p-a 是指针的运算。 这里 *p=a,所以 p(地址)的值与 a(地址)的值相同,p-a 为 0
在 b 中,a[j] 是 a 中的数据,& 是地址,加上 a * 是值,所以 *(&a[j]) 等价于 a[j]。
-
项目 b,*(a[i]),实际上等同于 a[i]。 取地址字符,&a[i] 表示 a[i] 的地址。 “*address”表示取存储在该地址位置的值,因此在 *(a[i]) 中,* 和 & 被抵消,这相当于 a[i]。
当然,答案是d。
-
const int *p,其中 p 是指向 const 对象的指针。
int * const p,指针是 const,而不是它指向的对象是 const。
指向 const 对象的指针(指向 const 对象的指针 - C++ 入门)。
怎么写? const double *cptr;
CONST 定义 cptr 指向的对象类型,而不是 cptr 本身。 换言之,CPTR 本身不是 CONST,它允许重新分配 CPTR。 它所指向的对象的值(可以是非常量的)不能通过取消引用 cptr 来修改。
1)如果指针指向一个const对象,则不允许更改它所引用的const的值。
2) 将 const 对象的地址分配给指向普通非常量对象的指针也会导致编译时错误。
3) 不能使用 void* 指针来保存 const 对象的地址,但必须使用 const void* 类型的指针来保存 st 对象的地址。
4)允许将非常量对象的地址分配给指向常量对象的指针,无法通过指针修改其值的行为会导致编译错误。但是,可以通过其名称修改原始变量的值。 不能保证指向常量点的指针指向的对象的值不可修改。
因此,“如果 cptr 是指向 const 对象的指针,则 *cptr 在程序持续时间内保持不变”的说法是错误的。
-
前者是指向常量的指针变量。
-
指向“常量”的指针变量可以通过其他方式完成,而无需更改它所引用的变量的值。
-
简单来说,要看p是什么,从右到左,首先看到的就是*,所以p是指针,那么p是什么样的指针呢? 再往左看,看到 int,所以 p 是指向形状的指针。 再往左,你会看到 const,这意味着这个 p 指向的形状是只读的,所以最终结果是:
p 是指向只读整形常量的指针。 这意味着 p 的点可以修改,但它指向的点的内存值不能修改。
如果是这种情况:const int * const p,因为 p 是直接被 const 修饰的,所以 p 的点不能修改,因为 int 也是 const,所以 p 指向的整形对象不能修饰。
数组和指针之间的区别:
数组名称确实表示指向数组第一个地址的指针,但是这个指针很特殊,它的值(指针的值是指针指向的地址)不能被覆盖,只能覆盖它指向的内容,换句话说,数组名称只能指向数组的第一个地址, 如果有数组 char a;那么如果 a = a+1; 这是一个甚至无法编译的错误。 对于普通指针,例如,可能有一个数组 char a; 然后定义一个字符 *p = a; 然后使用 p = p+1 是有效的,这意味着指针 p 指向 &a[1]。 >>>More
for (int i=0;i<4;i++)x*=*(p+1);
等效。 for (int i=0;i<4;i++)x=x*a[i]; >>>More
………童鞋:你搞砸了你的指针。
首先,填充功能确实设置了您分配给它的所有空间'\0',但指针 p 不再指向您分配的空间,而是指向内存中“堆”的顶部; 然后,func 2 再次将其向上移动,按 num 位和字节移动它,此时它指向 **? 反正不是你想要的地方。 将它指向的内存设置为'\0',则 strlen 应该得到 0,后面跟着 blank 将没有任何输出。 >>>More