我决定学习C++以前编程知识非常有限.我目前正在以下的书跳进C++由亚历克斯·阿兰.我已经点了指针的章节,作为练习问题的一部分,我遇到了以下问题:
- 编写一个函数,提示用户输入他或她的名字和姓氏,作为两个单独的值.此函数应通过传递给函数的其他指针(或引用)参数将两个值都返回给调用者.首先尝试使用指针然后使用引用.
这是我写的代码:
#include <iostream>
void getDetails(char * n, char * s)
{
std::cout << "Input name: ";
std::cin >> *n;
std::cout << "\n";
std::cout << "Input surname: ";
std::cin >> *s;
}
int main()
{
char *name = NULL;
char *surname = NULL;
getDetails(name, surname);
std::cout << "Name: " << *name << "\n";
std::cout << "Surname: " << *surname << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我一直遇到访问冲突错误,我完全不知道为什么.
当你有声明时:
*str++ = *end
是否为*strget赋值*end或者是否增加了值,然后为其赋值*end?
我在Quora上读到一个答案,我遇到了一些简单的事情:
char* inputString;
printf(inputString);
Run Code Online (Sandbox Code Playgroud)
是一个安全漏洞.
我假设inputString不是简单的未初始化,而是在两个语句之间用一些外部输入初始化.
如何准确,这是一个安全漏洞?
Quora的原始答案在这里:
但它没有为此声明提供额外的背景信息.
我确定这一定是以前被问过的,但我找不到它。
基本上,我在看这些变量:
unsigned short* bufferName = 0;
unsigned short* pBuffer = 0;
bufferName = new unsigned short[6400];
pBuffer = bufferName;
cout << &bufferName << &pBuffer
Run Code Online (Sandbox Code Playgroud)
此设置可以读取6400像素(每个= 2字节)bufferName。该变量pBuffer用于跟踪bufferName的内存块中。
第cout5行上的语句打印每个地址。但是,一旦我增加:pBuffer,如何找到它指向的新地址?
非常感谢您的耐心和时间。我知道这篇文章对我所做的事情很短,但是我想故意使它简短。
两者之间有什么不同,如果有的话
*a = b;
Run Code Online (Sandbox Code Playgroud)
和
a = &b;
Run Code Online (Sandbox Code Playgroud)
这两种不同的方法是将var指向另一个var吗?
typedef struct {
double *x;
int points;
} Polygon;
polygon[cc].points = readobject(polygon[cc].file); //lets say equals 15
polygon[cc].x = (double *) malloc(polygon[cc].points * sizeof(double));
printf("%d\n", sizeof(polygon[cc].x) / sizeof(polygon[cc].x[0]));
//This prints out on 1
Run Code Online (Sandbox Code Playgroud)
我测试初始化x为x[100],然后它工作,但不应该malloc()调用设置结构的数组x[15]?它只是测量两个doubles 的字节吗?
我刚学习了C++指针和删除指针.我自己尝试了这个代码
# include<iostream>
using namespace std;
int main(){
int num = 10;
int *p = new int;
p = #
cout << *p << endl;
delete p;
cout << num << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
删除指针后p,我无法打印值num.但如果我p在程序的最后删除,cout << num << endl;会给我10.任何人都知道我在哪里运行?
我正在尝试为像这样的结构内部的数组分配内存:
typedef struct
{
int a;
int *b;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
我有一个初始化结构的函数,如下所示:
void init( MyStruct * myStruct, int size )
{
myStruct = malloc( sizeof( MyStruct ) );
myStruct->a = size;
myStruct->b = malloc( size * sizeof( int ) );
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试为数组b中的字段分配内存时,我得到了分段错误错误
int main( void )
{
int i, size = 5;
MyStruct *myStruct;
init( myStruct, size );
for( i = 0; i < size; i++ )
{
myStruct->b[i] = malloc( sizeof( int ) ); //fails here
myStruct->b[i] = i*i;
} …Run Code Online (Sandbox Code Playgroud) 我开始理解指针以及如何取消引用它们等等.我一直在用ints 练习,但我认为它char会表现得相似.使用*取消引用,使用&访问内存地址.
但在下面的示例中,使用相同的语法来设置a的地址char并将字符串保存到同一个变量中.这是如何运作的?我想我一般都很困惑,也许我正在思考它.
int main()
{
char *myCharPointer;
char charMemoryHolder = 'G';
myCharPointer = &charMemoryHolder;
printf("%s\n", myCharPointer);
myCharPointer = "This is a string.";
printf("%s\n", myCharPointer);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我刚刚注意到一些我对指针和++运算符不太了解的东西.让我们检查一下这段代码
int test = 0;
int* pTest = &test;
*pTest = *pTest + 1;
*pTest++;
Run Code Online (Sandbox Code Playgroud)
当第一次编写这段代码而不试用它时,我期望最后两行做同样的事情并测试得到值2,但是最后一行增加了指针地址一个,这就是刚才
pTest++;
Run Code Online (Sandbox Code Playgroud)
会做.我只是遗漏了一些非常明显的东西,或者为什么
*pTest++;
Run Code Online (Sandbox Code Playgroud)
和
pTest++;
Run Code Online (Sandbox Code Playgroud)
做同样的事情?