我们处理的是一个常量指针,因此它所持有的地址不能更改。但是引用的内存地址的内容应该是可变的.
尽管如此,在尝试这样做时,我仍然会得到编译/分段错误。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * const c_ptr = "firstValue"; // now c_ptr is a const ptr to an immutable string literal,
//we can
在C语言中,Array是相同数据类型的集合,即当我们定义如下数组时:
int my_list[50];
我们在计算机内存中分配50个连续位置来存储50个整数。
当有人说我的数组是"my_list“时,这是什么意思?它是否统称为我在内存中定义的所有50个空格?
如果是这样的话,当我试图学习指针时,他们会说,不,不,有一个名为"my_list“的指针,它指向my_list;
我的结论如下:"my_list“ to 表示所有50个内存位置,但是当我们定义数组时,机器生成一个指针,其名称为”意外“my_list,它指向my_list;
数组my_list表示所有50个位置,指针
如果我在C程序中定义一个char指针并将其初始化为“String”
有人能解释一下,一个字符指针,如果要在其中包含一个地址,它是如何容纳一个字符串的?
这与指针的定义不矛盾吗?我在这里错过了什么?
例如:
char pointer=" how is it possible at all ? ";
printf("%s",pointer);
该代码是Fortran主程序调用C函数并返回整数数组指针的示例。问题是我想把一个Fortran指针赋给一个带有C数组值的Fortran数组,所以我让Fortran指针同时指向两个目标。我现在知道这是错的。但是由于Fortran没有像*p这样的操作,我如何才能使Fortran数组具有与赋值的Fortran指针相同的值? fortran的主要代码如下: program Test
use, intrinsic :: iso_c_binding, only : c_ptr, &
c_f_pointer, &
一些C或C++程序员惊讶地发现,即使是。但是,对于堆或堆栈数组,可以存储数组末尾之后的地址,这允许您存储" end“位置,以便在循环中使用。
但是,从单个堆栈变量形成指针范围是不是未定义的行为,如:
char c = 'X';
char* begin = &c;
char* end = begin + 1;
for (; begin != end; ++begin) { /* do something */ }
虽然上面的例子很没用,但在某些函数需要一个指针范围的情况下,这可能会很有用,而你有一个简单的值来传递它。
这是未定义的行为吗?
由于指针算法是在同一个数组中定义的,所以我怀疑我们能否从另一个NULL中减去NULL。我对以下内容的执行情况感到关切:
//first and second can both either be from the same array
//or be both NULL
prtdiff_t sub(void *first, void *second){
//Do I really need this condition?
if(!first && !second)
return (ptrdiff_t) 0;
return second
考虑以下程序:
int main()
{
int array[9];
const int (*p2)[9] = &array;
}
它在C++ (参见现场演示)中编译得很好,但在C中编译失败。默认情况下,GCC给出以下警告。(请参阅现场演示)。
prog.c: In function 'main':
prog.c:4:26: warning: initialization from incompatible pointer type [enabled by default]
const int (*p2)[9] = &array;
但是
大家好!我是C++的初学者,所以我没有很好的体验。
我需要一些帮助,
我尝试创建对象(type ELEMENT)的动态数组,当我想从数组中删除对象时遇到问题(错误2157)
这是代码的一部分:
class ELEMENT
{
private :
int id_num;
int nbnr;
int BI;
public :
: void () ................
: ...............
:
};
ELEMENT *T;
/* before calling the next fonction, I allocate a dy
我知道在c++中,超出缓冲区边界的访问是未定义的行为。
下面是cp首选项的示例:
int table[4] = {};
bool exists_in_table(int v)
{
// return true in one of the first 4 iterations or UB due to out-of-bounds access
for (int i = 0; i <= 4; i++) {
if (table[i] == v) return true;
}
return false;
}
但是,我在c++标准中找不到段落。
有人
下面的c程序的输出是1。有人能解释一下吗?
#include<stdio.h>
#include<string.h>
int main(){
int a = 5,b = 10,c;
int *p = &a,*q = &b;
c = p - q;
printf("%d" , c);
return 0;
}
最近,我发现了一个关于数组和指针的有趣的代码片段,这些代码片段是我不理解的。
下面是代码:
void Function(int *B, int *A, int *C, int m)
{
int i;
A++;
for(i = 0; i < m; i++, B++, A++, C++)
*C=*B + *(A-1);
}
int main()
{
int A[] = {3,6,2};
int B[] = {5,7,9};
int C[3];
int n = 3;
int i;
Function(A,B,C,n);
for(i =
如果我正确理解,这个程序在C++中有未定义的行为,因为中间值p + 1是指向未初始化内存的指针:
int main () {
int x = 0;
int *p = &x;
p = p + 1 - 1;
*p = 5;
}
如果void被放在main的参数列表中(按照C语法的要求),它是否也是C中未定义的行为?
考虑以下代码:
int main() {
int (*p)[]; // pointer to array with unspecified bounds
int a[] = {1};
int b[] = {1,2};
p = &a; // works in C but not in C++
p = &b; // works in C but not in C++
return 0;
}
在纯C中,您可以为任意维度的数组的这种类型的地址分配指针。但在C++中,您不能这样做。当编译器允许为这样的指针赋值时,我发现了一种情况:
s
在Jens的教科书“现代C”中,我读到了“指针必须指向有效对象或有效对象之外的一个位置或为null”的指针。为什么指向有效对象之外的一个位置是可以接受的?例如:
int array[5] = {0};
int* p = array;
p = array + 5 // points to a valid location
p = array + 6 // points to an invalid location